23

» WarCraft 3 / Отлов урона

Похожие вопросы:

ответ
Эмм что за ерунда, сократил код, убрав всё лишнее, но утечки все равно остаются, по 1.5 - 2 хэндла за каждое нанесение урона (тип хэндла не знаю как посмотреть). Когда триггер отключаешь, то всё нормально.
Сокращенный код
function SDMSCreateTextTag takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local unit s=GetEventDamageSource()
    local integer i=GetConvertedPlayerId(GetOwningPlayer(u))
    local texttag tt=CreateTextTag()
    local real dmg=GetEventDamage()

    if ( dmg > 1.00 ) and ( dmg < 9999.00 ) then
        if GetPlayerId(GetOwningPlayer(u))==12 then
            call SetTextTagText(tt, "|cff9db9eb-"+I2S(R2I(dmg))+"|r", 0.023)
        else
            call SetTextTagText(tt, "|cffffa500-"+I2S(R2I(dmg))+"|r", 0.023)
        endif
        call SetTextTagPosUnit(tt, u, 0)
        call SetTextTagColor(tt, 255, 255, 255, 255) 
        call SetTextTagVelocity(tt, 0.05325*Cos(90 * bj_DEGTORAD), 0.05325*Sin(90 * bj_DEGTORAD))
        call SetTextTagPermanent(tt, false)
        call SetTextTagLifespan(tt, 1.0)
        call SetTextTagFadepoint(tt, 0.0)
    endif
    call PolledWait(2.0)

    call DestroyTextTag(tt)
    set u=null
    set s=null
    set i=0
    set dmg=0
    set tt=null
endfunction

function SDMSTriggerRegisterUnitDamaged takes nothing returns nothing
    call TriggerRegisterUnitEvent(udg_SDMStrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
endfunction

function theSDMSTriggerActions takes nothing returns nothing
    local trigger UnitEnter=CreateTrigger()

    call TriggerRegisterEnterRectSimple(UnitEnter, gg_rct_Arena)
    call TriggerAddAction(UnitEnter,function SDMSTriggerRegisterUnitDamaged)

    set UnitEnter=null
endfunction

function InitTrig_the_SDMS_Trigger takes nothing returns nothing
    local trigger tr=CreateTrigger()

    set udg_SDMStrigger=CreateTrigger()//Тут также меняется название глобальной переменной типа триггер.
    call TriggerAddAction(udg_SDMStrigger,function SDMSCreateTextTag)
    call TriggerRegisterTimerEventSingle(tr,0.0)
    call TriggerAddAction(tr,function theSDMSTriggerActions)

    set tr=null
endfunction
Wait вызывает утечки ((
Пришлось делать через таймер
ответ
там есть куча статей на эту тему + пример на гуи от меня любимого
ответ
ОП, спелы все триггерные?

Если да, то заводишь глобальную переменную bool IsSpell = false, перед нанесением урона в коде даёшь ей true, после - обратно false. В триггере, который срабатывает на получение урона, первым действием ставишь локалку булёвую, которая ==IsSpell. Вуаля, ты отслеживаешь весь урон с абилок, а что не урон с абилок, то есть урон с руки.

Сам так всегда делал, никогда не понимал пляски с бубнами и прочими орбами. Оно, конечно, проще идеологически, но по факту намного геморройнее: добавлять орб, проверять орб, удалять орб, подменять реальный орб триггерно...

Кстати, можно по такой же схеме через логические переменные указывать тип урона, например, чистый, физический (почему бы и не давать с абилок физический урон?) или магический, от этого вообще что угодно можно пилить, хоть кучу видов брони, хоть цветовые индикаторы разного типа урона.
ответ
У тебя событие в триггере неверное. Ты указал, что юнит атакован, а необходимо событие, что юнит получает урон.
ответ
Я использую следующий костыль: урон от заклинаний наносится только от лица дамика, который имеет соответствующую способность для проверки. Пассивку, например с названием "Урон - огонь". Тем самым, можно отследить тип полученного урона.

23

» WarCraft 3 / Ошибка при конвертации

Похожие вопросы:

ответ
Тут по-моему всё очевидно. Чадо пытается открыть в мдлвисе модель в формате m2, чего мдлвис не делает ещё с выхода burning crusade.

23

» WarCraft 3 / Предметы

Похожие вопросы:

ответ
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
ответ
Melissa:
а какая способность у этого предмета?
Разобрался с этой проблемой.
ответ
XGM Bot:
Похожие вопросы:

ответ
пикнутый итем это для цикла
а у тебя тут должен быть манипулятед итем
ответ
ворлдэдит=>Файл=>Параметры=>Общие=>Разрешить использ. отриц. значений в Редакторе Объектов.
Изменяешь значение после Шифт+Энтер. Способности приписываешь через запятую названиями переменных (показать ид - Контрол+Ди).
ответ
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
ответ
предмет это просто иконка которая содержит способности
книга заклинания это способность
и редактировать нужно способность "книга заклинаний"
или создать на её основе новую способность "моя книга заклинаний"
а потом у предмета просто указать способность "моя книга заклинаний"
если не хватает знаний то их можно пополнить в статьях
думаю первых 200 статей хватит чтобы создать несложную карту
ответ
Первый вопрос. Проблема с триггерным перемещением возникает, если скорость объекта, движение которого подразумевается, равно 0. Поставь 1 и будет тебе счастье. Есть интересный способ обездвижить юнита. Это через SetUnitPropWindow. Поставь в аргументы юнита и число 0 и он перестанет двигаться.
Второй вопрос. В характеристиках твоего dummy-юнита в РО(редактор объектов) выставь поле: Наводка (контрольный радиус) (uerd) и поставь значение 0.00. Юнит не будет поворачиваться при выстреле.

ответ
Steal nerves:
Способности нужно дать юниту, и все. Если эффект временный, используем вэйт/wait (по-русски ждать) или таймеры, по истечении которого удаляем способность. Но вэйты не рекомендуются для использования.
xgm.guru/p/wc3/articles новичок, иди почитай
xgm.guru/p/wc3/needspells здесь не стол для заказов, хотя тема заброшена
xgm.guru/p/wc3/bpe где-то тут была похожее, только с баффами
можете конкретно написать, что вам нужно.
смотреть сюда
событие - юнит применяет способность
условие -применяемая способность == тип твоей способности
действие - добавить способность
ждать 15 сек.
действие - удалить способность
про локалки + таймер, хэш-таблицы
xgm.guru/p/wc3/jass_local_vars есть примерчик внизу, похожий на ваш
ответ
Ищи в разделе "Нейтральное здание".

23

» WarCraft 3 / Фаталы в триггере

Похожие вопросы:

ответ
Спасибо всем за ответы и пояснения! Закрываю флудильню :с
ответ
Ну тут все очевидно, я абсолютно точно установил источник проблемы и нашел легкодоступное решение, специально для Вас.
Насколько я понимаю, мне совершенно не обязательно его описывать, так как Вы, справедливо полагая что Все люди на Земле, как и Вы, обладают экстрасенсорными способностями, можете подсмотреть его из моей головы.
ответ
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка
Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек

23

» WarCraft 3 / Атмосфера

Похожие вопросы:

ответ
Вы что шутите? Никто банить за "плохие" вопросы не будет. Есть более логичное решение - скрывать такие вопросы и кидать линки на соответствующие материалы.
ответ
PhysCraft, читал, там очень мало написано, и совсем не то что я ожидал. В принципе я вроде смог прописать путь по папкам, сделал что бы играла музыка, в игре модели видно, но в редакторе нет, и как я теперь буду в редакторе ландить? Мне импорт для ландшафта нужен. Есть какой-то способ в редакторе тоже видеть?
ответ
Helkar, Как говорится. Работай и не смотри на других.
ответ
Модуль вопросов не предназначен для этого, для подобных обсуждений используйте блоги.
ответ
лицензия?
Нет

23

» WarCraft 3 / Триггер на перемещение

Похожие вопросы:

ответ
я сделал ) Спасибо что не скинули готовое хоть сам допетрил)
ответ
Держи. Чтобы проверить нажми ESC в игре.
раскрыть
потребовалось полторы минуты
ответ
Умирающий юнит, в том понятии, в каком его жуёт игра, не имеет баффов.
Вместо "Умирает" отлавливай поулчение смертельного удара (событие юнит получает урон).
Если полученный урон > оставшегося здоровья - то сделать всё то, что у тебя для умирающего
ответ
DvernoiProem:
Там все включенные триггеры - относятся к системе. Остальные выключены.
Попробуй ка сохранить карту без этой функции, потом опять с нею. Я сейчас попробую оптимизировать её.
ответ
Сделал простой пример на jass. Если пехотинец в радиусе 300 от паладина, ему дается способность доспех веры.
jass
globals
    unit Unit1
    unit Unit2
    timer Timer = CreateTimer()
endglobals

function Trig_sample_Conditions takes nothing returns boolean
    return GetFilterUnit() == Unit2 and GetUnitAbilityLevel(GetFilterUnit(), 'AHad') == 0
endfunction

function Trig_sample_Actions2 takes nothing returns nothing
    if not IsUnitInRange(Unit1, Unit2, 300.) then
        call UnitRemoveAbility(Unit2, 'AHad')
        call PauseTimer(GetExpiredTimer())
    endif
endfunction

function Trig_sample_Actions takes nothing returns nothing
    call UnitAddAbility(Unit2, 'AHad')
    call TimerStart(Timer, .1, true, function Trig_sample_Actions2)
endfunction

//===========================================================================
function InitTrig_sample takes nothing returns nothing
    local trigger trig = CreateTrigger(  )
    set Unit1 = CreateUnit(Player(0), 'Hpal', 0., 0., 0.)
    set Unit2 = CreateUnit(Player(0), 'hfoo', 0., 0., 0.)
    
    call TriggerRegisterUnitInRange(trig, Unit1, 300., function Trig_sample_Conditions)
    call TriggerAddAction(trig, function Trig_sample_Actions)
endfunction

23

» WarCraft 3 / Улучшения предметов

Похожие вопросы:

ответ
Понизить уровень улучшения никак нельзя. Многие пробовали самые извращенные способы, но нет.
Покопался на форуме, нашел темы, где обсуждались похожие проблемы (правда пути решения там разные):
ответ
используй геройский скилл предметы
ответ
Нет, не существуют. Без бд не обойтись.
ответ
тогда можно заменить исследование на создание юнита
здание создает определенного юнита -> повышаем уровень инвентаря
у этого способа есть несколько минусов:
  • одна иконка на всех уровнях улучшения
  • юнит не исчезнет на последнем уровне улучшения, а значит придется заменять здание на другое, но уже без этого юнита
ответ
Мда, кто так делает а? Требование лиж закрывает иконку, эффект то пассивка дает всегда, и пофигу её что там за требование..
Повышай броню так или делай другой эффект улучшения - Способность на уровень.
Сделай 2 уровня у твоих Рунических браслетов на 1 уровне сделай бонус брони 0 а на втором какой хочешь, потом с помощью апгрейда повышай уровень способности (а вы не знали что апгрейды могут повышать уровни способностям, изменять данные аур и так далее?)

23

» WarCraft 3 / Автоатака

Похожие вопросы:

ответ
Хорошо, спасибо за совет.
Просто я там как то оставлял заявку, ни ответа, ни привета!
ответ
Ох уж эти отловы урона
ответ
юнит атакован
ответ
Порождать утечку может только объект, чей тип наследует тип handle.
Такие типы как:
  • boolean
  • integer
  • real
  • string
являются базовыми и утечек не порождают. Все остальные типы (unit, group, timer, multiboard и т.д.) являются наследниками типа handle и могут вызывать утечки.
Подробнее тут:
и тут:
Исключением из правил является тип player. Так как игроки существуют на протяжении всей игры, так как они не уничтожаются и не удаляются, являются постоянным объектом существующим на протяжении всей игры, утечек они не порождают.
ответ
Пассивный инвиз с установленным временем перехода в невидимость -1.

23

» WarCraft 3 / Музыка

Похожие вопросы:

ответ
можно задать постоянную музыку при входе юнита в область.
А выключать её по событию "юнит покидает область".
Они же рядом события эти, чего усложнятьв сё.
ответ
По ходу не можно...

23

» WarCraft 3 / Помощь

Похожие вопросы:

ответ
ахах, ответ в самом вопросе. Создать скилл сопротивление магии с 10ю уровнями, дать его юниту, выставить нужные значения на каждом уровне скилла.
ответ
quq_CCCP:
Darknessay:
Ничего не понятно, но если не работает пеший в пешего, почему не пеший>летающий>пеший - использовать посредника?
Ващето пеший в пешего работает но не так, альт форма дамми юнит, нормальная форма тот в кого хотим превратится, основа перевоплощение, все параметры в 0.
Я думаю, тебе стоит переписать свою темку на другом языке, ибо не отвечают потому что не понимают.
ответ
  1. Ситуация попроще. Заносишь все камни в массив, после чего создаешь триггер с событием смерти твоего героя. В действиях сравниваешь расстояния между камнями из массива и делаешь соответствующие действия (т.е. выбираешь область, которая сопоставима камню, в которой будет воскрешаться твой герой).
  2. Данная ситуация вполне решаема через несколько переменных и триггеров. Для начала, при init'е карты поставь значение стартового камня воскрешения (можешь их сопоставлять с индексами, или же сразу прописывать в переменные юнитов). Потом создай триггер, где ты будешь переназначать камень воскрешения (если таких камней будет несколько, то понятное дело будет необходимо несколько триггеров) с событием "Юнит входит в область" и с проверкой "Вошедший юнит = твой герой". Делаешь с камнем необходимые действия (спецэффекты и всякое), а также назначь переменную последнего посещенного камня. Далее создаешь триггер с событием "Юнит игрока умирает" или же "Юнит умирает" + условие "Умерший юнит = твой герой" и добавляешь действия по воскрешению у последнего активированного камня.
ответ
А касательно остальной части, если UnitUserData нигде не используется, создаешь массив юнитов и отрядов. Массив юнитов забиваешь своими капитанами. В UnitUserData капитана пихаешь его порядковый номер в массиве. Создаешь группу юнитов для этого капитана.
  1. Добавление через каст способности.
Я бы делал через 2 разные абилки с одной и той же позицией в интерфейсе. Пока нужный тебе юнит не является частью отряда - у него таргетная абилка при касте которой на капитана он добавляется в группу соответствующего капитана и получает 2ю абилку взамен первой.
Касательно выделения этих пехотинцев - можно намутить что-то с передачей контроля или создать триггер, который будет снимать выделение с юнитов у которых есть 2я абилка. Если ты хочешь чтобы по одиночке можно было выделять пехотинцев - можешь создать переменную для каждого игрока с капитанами, куда будет просто записываться последний выбранный юнит. При снятии выделения - проверять не выбран ли этот же юнит, в случае чего не снимать выделение. Правда не уверен будет ли корректно работать :> В крайнем случае - будет работать в три клика вместо двух. Если я не ошибаюсь.
Касательно поведения этих пехотинцев - что-то реально стоящее сделать сложно. Возможно, но мне не с руки все расписывать :> Простейший вариант - приказывать пехотинцам после добавления в группу следовать за капитаном.
  1. Добавление через атаку капитана
Триггер, проверяющий что капитан получил урон или атакован, как угодно. Далее любым способом проверяешь есть ли в группе этого капитана юниты. Если нет - выбираешь всех пехотинцев N радиусе, добавляешь в отряд, заменяешь абилку/либо просто приказываешь кастануть в капитана первую абилку.

23

» WarCraft 3 / Наработки

Похожие вопросы:

ответ
Вот твоя наработка xgm.guru/p/wc3/3962
ответ
Уровень предмета - класс.
ответ
trackable
ответ
quq_CCCP:
Там луч основан на кастом молнии (точнее на эффекте молннии под названием "mana drain"), созданную кодом молнию можно красить в любой цвет и масштабировать, ну остальное думаю и так понятно.
Там вроде даже несколько молний создаются, с этим разобрались, вопрос будет в следующем :)
Как это реализовано, ведь идет пик юнитов вдоль этого луча, но не думаю что сделано через цикл создающий группы и перебор юнитов, накладно для железа.
В общем вот тебе скрипт, достал из доты, разбирайся
Script
function NKA takes nothing returns boolean
local trigger t=GetTriggeringTrigger()
local integer h=GetHandleId(t)
local integer c=(LoadInteger(HY,(h),(34)))
local unit IGO=(LoadUnitHandle(HY,(h),(2)))
local real LLR=GetUnitFacing(IGO)
local real NLA=LLR*bj_DEGTORAD
local location NMA=GetUnitLoc(IGO)
local real T4E=GetLocationZ(NMA)
local location NPA=Location(GetUnitX(IGO)+DME*Cos(NLA),GetUnitY(IGO)+DME*Sin(NLA))
local real NQA=GetLocationZ(NPA)
local lightning l1=(LoadLightningHandle(HY,(h),(676)))
local lightning l2=(LoadLightningHandle(HY,(h),(677)))
local lightning l3=(LoadLightningHandle(HY,(h),(678)))
local lightning l4=(LoadLightningHandle(HY,(h),(679)))
local lightning l5=(LoadLightningHandle(HY,(h),(680)))
local real NSA=1
local real x
local real y
local real r1
local real NTA
local real NUA
local real NWA
local real NYA
local real NZA
local real N_A
local real N0A
local real N1A
local real N2A
local real N3A
local real N4A
local real N5A
local real N6A
local real N7A
local real N8A
local real N9A
local real BVA
local real BEA
local real BXA
local real BOA
local real BRA
local real BIA
local real BAA
local real BNA
local real BBA
local real BCA
local real BDA
local real BFA
local real BGA
local real BHA
local group g
local real BJA
local real BKA
local integer L0E
local real BLA
local real BMA
local real BPA
local boolean MIE=false
local boolean MAE=false
local unit Q9E=(LoadUnitHandle(HY,(h),(17)))
local unit UIE=null
local unit R3X=null
local real BQA
local real BSA
local real BTA
local real BUA=(LoadReal(HY,(h),(688)))
local boolean QMX=(LoadBoolean(HY,(h),(689)))
local boolean QTX=(LoadBoolean(HY,(h),(672)))
local real BWA
local ubersplat YEE
local real loc_real49=(LoadReal(HY,(h),(23)))
local real loc_real50=(LoadReal(HY,(h),(24)))
local real loc_real51
local real loc_real52
local real BYA
local real BZA=5
if GetUnitCurrentOrder(IGO)==$D0021 then
call DisableTrigger(t)
call SBE(IGO)
call EnableTrigger(t)
endif
call RemoveLocation(NMA)
call RemoveLocation(NPA)
if IsUnitPaused(IGO)==false and(GetTriggerEventId()==EVENT_UNIT_ISSUED_POINT_ORDER or GetTriggerEventId()==EVENT_UNIT_ISSUED_TARGET_ORDER)then
set x=GetUnitX(IGO)
set y=GetUnitY(IGO)
if GetIssuedOrderId()!=$D020A and GetIssuedOrderId()!=$D00D9 and GetIssuedOrderId()!=$D0278 then
call DisableTrigger(t)
call SBE(IGO)
call EnableTrigger(t)
endif
if GetIssuedOrderId()==$D0003 then
if GetTriggerEventId()==EVENT_UNIT_ISSUED_TARGET_ORDER then
set BJA=GetUnitX(GetOrderTargetUnit())
set BKA=GetUnitY(GetOrderTargetUnit())
else
set BJA=GetOrderPointX()
set BKA=GetOrderPointY()
endif
set BLA=TSE(BJA,BKA,x,y)
if BLA<0 then
set BLA=BLA+360
endif
set BPA=LLR-BLA
if BPA<0 then
set BPA=BPA+360
endif
if BPA<$B4 then
set MIE=true
set BMA=LLR+6
else
set MAE=true
set BMA=LLR-6
endif
set BUA=TSE(BJA,BKA,x,y)+$B4
call SaveReal(HY,(h),(688),((BUA)*1.))
endif
elseif GetTriggerEventId()==EVENT_UNIT_SPELL_EFFECT or GetTriggerEventId()==EVENT_WIDGET_DEATH or(LoadInteger(HY,(GetHandleId(IGO)),(704)))==-1 or c>=6./.02 or YSE(IGO)or P2E(IGO)then
if GetTriggerEventId()!=EVENT_UNIT_SPELL_EFFECT or(GetTriggerEventId()==EVENT_UNIT_SPELL_EFFECT and(GetSpellAbilityId()=='A1Z3' or GetSpellAbilityId()=='A1RK' or GetSpellAbilityId()=='A315' or GetSpellAbilityId()=='A27H'))then
call SaveInteger(HY,(GetHandleId((IGO))),((4312)),(2))
call Y5E(IGO)
call SetUnitPathing(IGO,true)
call RemoveUnit(LoadUnitHandle(HY,h,0))
call FlushChildHashtable(HY,(h))
call MWE(t)
call UnitRemoveAbility(IGO,'A205')
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A1Z3',false)
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A205',false)
if(LoadInteger(HY,(GetHandleId(IGO)),(704)))==0 or(LoadInteger(HY,(GetHandleId(IGO)),(704)))=='A1YY' then
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A1YY',true)
endif
call DestroyLightning(l1)
call DestroyLightning(l2)
call DestroyLightning(l3)
call DestroyLightning(l4)
call DestroyLightning(l5)
call StopSound(RQ,false,true)
endif
elseif GetTriggerEventId()==EVENT_UNIT_ISSUED_ORDER then
if GetIssuedOrderId()==852177then
set QMX=true
endif
if GetIssuedOrderId()==852178then
set QMX=false
endif
call SaveBoolean(HY,(h),(689),(QMX))
else
set BLA=LLR-BUA
if BLA<-$B4 then
set BLA=BLA+360
elseif BLA>$B4 then
set BLA=BLA-360
endif
set BWA=1
if c<35 and QTX then
set BWA=7
endif
if BLA<(-1*BWA)then
set LLR=LLR+BWA
elseif BLA>BWA then
set LLR=LLR-BWA
else
set QTX=false
call SaveBoolean(HY,(h),(672),(QTX))
set LLR=BUA
endif
if((LoadInteger(HY,(GetHandleId((IGO))),((4301))))==1)==false then
call SetUnitFacing(IGO,LLR)
endif
set NLA=LLR*bj_DEGTORAD
set c=c+1
call SaveInteger(HY,(h),(34),(c))
set r1=DME
set x=GetUnitX(IGO)+50*Cos(NLA)
set y=GetUnitY(IGO)+50*Sin(NLA)
if QMX and YPE(IGO)==false and YSE(IGO)==false then
if((LoadInteger(HY,(GetHandleId((IGO))),((4331))))==1) then
set BZA=BZA*2
endif
set BTA=NLA
set BQA=SFE(GetUnitX(IGO)+BZA*Cos(BTA))
set BSA=SJE(GetUnitY(IGO)+BZA*Sin(BTA))
call UEE(BQA,BSA,$C8)
call SetUnitX(IGO,BQA)
call SetUnitY(IGO,BSA)
endif
call SetUnitState(IGO,UNIT_STATE_LIFE,GetUnitState(IGO,UNIT_STATE_LIFE)-GetUnitState(IGO,UNIT_STATE_LIFE)*.06*.02)
call UEE(x,y,$C8)
if ModuloInteger(c,$A)==0 then
set DWE=MSE()
set J1=IGO
set L0E=0
loop
exitwhen L0E*50>DME
set BJA=x+L0E*50*Cos(NLA)
set BKA=y+L0E*50*Sin(NLA)
set g=MSE()
call GroupEnumUnitsInRange(g,BJA,BKA,$9B,Condition(function ZBE))
call GroupAddGroup(g,DWE)
call GroupEnumUnitsInRange(g,BJA,BKA,$9B,Condition(function Z_E))
call GroupAddGroup(g,DWE)
call MQE(g)
if ModuloInteger(L0E,3)==0 then
call UDE(GetOwningPlayer(IGO),2,BJA,BKA,$E1)
endif
set L0E=L0E+1
endloop
set DUE=IGO
set DTE=GetUnitAbilityLevel(IGO,'A1YY')
set BYA=(I2R(c)/50.)/6
set DYE=(5*DTE+$A)+(5*DTE+$A)*BYA
set DZE=(DTE+BYA*(DTE))/'d'
call GroupRemoveUnit(DWE,IGO)
call ForGroup(DWE,function NJA)
call MQE(DWE)
set g=null
set DWE=null
endif
if ULE(IGO)==false then
if Q9E!=null then
set r1=S6E(IGO,Q9E)
endif
set NTA=x
set NUA=y
set NWA=T4E+$C8
set NYA=NTA+r1*Cos(NLA)
set NZA=NUA+r1*Sin(NLA)
set N_A=NQA
set N0A=x+DPE*Cos((LLR-90)*bj_DEGTORAD)
set N1A=y+DQE*Cos((LLR-90)*bj_DEGTORAD)
set N2A=T4E+$C8
set N3A=N0A+r1*Cos(NLA)
set N4A=N1A+r1*Sin(NLA)
set N5A=NQA
set N6A=x+DPE*Cos((LLR+90)*bj_DEGTORAD)
set N7A=y+DQE*Cos((LLR+90)*bj_DEGTORAD)
set N8A=T4E+$C8
set N9A=N6A+r1*Cos(NLA)
set BVA=N7A+r1*Sin(NLA)
set BEA=NQA
set BXA=x
set BOA=y
set BRA=T4E+$C8+DSE
set BIA=BXA+r1*Cos(NLA)
set BAA=BOA+r1*Sin(NLA)
set BNA=NQA
set BBA=x
set BCA=y
set BDA=T4E+$C8-DSE
set BFA=BBA+r1*Cos(NLA)
set BGA=BCA+r1*Sin(NLA)
set BHA=NQA
if ModuloInteger(c,$A)==0 and r1==DME then
set BJA=GetUnitX(IGO)+(DME)*Cos(NLA)
set BKA=GetUnitY(IGO)+(DME)*Sin(NLA)
call DestroyEffect(AddSpecialEffect("war3mapImported\\FireRayTarget.mdx",BJA,BKA))
endif
if ModuloInteger(c,$A)==0 then
call SetSoundPosition(RQ,GetUnitX(IGO),GetUnitY(IGO),'d')
set BJA=GetUnitX(IGO)+(r1)*Cos(NLA)
set BKA=GetUnitY(IGO)+(r1)*Sin(NLA)
set YEE=CreateUbersplat(BJA,BKA,"SRAY",$FF,$FF,$FF,$FF,false,false)
call SetUbersplatRenderAlways(YEE,true)
call YXE(YEE,$A)
set YEE=null
endif
call MoveLightningEx(l1,false,NTA,NUA,NWA,NYA,NZA,N_A)
call MoveLightningEx(l2,false,N0A,N1A,N2A,N3A,N4A,N5A)
call MoveLightningEx(l3,false,N6A,N7A,N8A,N9A,BVA,BEA)
call MoveLightningEx(l4,false,BXA,BOA,BRA,BIA,BAA,BNA)
call MoveLightningEx(l5,false,BBA,BCA,BDA,BFA,BGA,BHA)
call SetLightningColor(l1,1.,1.,1.,NSA)
call SetLightningColor(l2,1.,1.,1.,NSA)
call SetLightningColor(l3,1.,1.,1.,NSA)
call SetLightningColor(l4,1.,1.,1.,NSA)
call SetLightningColor(l5,1.,1.,1.,NSA)
endif
endif
set t=null
set IGO=null
set l1=null
set l2=null
set l3=null
set l4=null
set l5=null
set NMA=null
set NPA=null
return false
endfunction
function B_A takes nothing returns nothing
local trigger t=CreateTrigger()
local integer h=GetHandleId(t)
local unit IGO=GetTriggerUnit()
local real x=GetUnitX(IGO)
local real y=GetUnitY(IGO)
local real OLX=TSE(x,y,GetSpellTargetX(),GetSpellTargetY())*bj_DEGTORAD
local real dx=SFE(x+DME*Cos(OLX))
local real dy=SJE(y+DME*Sin(OLX))
local lightning l1=AddLightning("SRAY",false,x,y,dx,dy)
local lightning l2=AddLightning("SRAY",false,x,y,dx,dy)
local lightning l3=AddLightning("SRAY",false,x,y,dx,dy)
local lightning l4=AddLightning("SRAY",false,x,y,dx,dy)
local lightning l5=AddLightning("SRAY",false,x,y,dx,dy)
local unit V0X
if GetUnitAbilityLevel(IGO,'A14K')>0 then
set V0X=CreateUnit(GetOwningPlayer(IGO),'e00E',x,y,0)
call KZE(V0X,'A14K')
call SaveUnitHandle(HY,h,0,V0X)
set V0X=null
endif
call SetUnitFacing(IGO,OLX*bj_RADTODEG)
call StartSound(RQ)
call SetSoundPosition(RQ,x,y,'d')
call TriggerRegisterTimerEvent(t,.02,true)
call TriggerRegisterDeathEvent(t,IGO)
call TriggerRegisterUnitEvent(t,IGO,EVENT_UNIT_ISSUED_TARGET_ORDER)
call TriggerRegisterUnitEvent(t,IGO,EVENT_UNIT_ISSUED_POINT_ORDER)
call TriggerRegisterUnitEvent(t,IGO,EVENT_UNIT_ISSUED_ORDER)
call TriggerRegisterUnitEvent(t,IGO,EVENT_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t,Condition(function NKA))
call SaveUnitHandle(HY,(h),(2),(IGO))
call SaveReal(HY,(h),($D),((OLX)*1.))
call SaveReal(HY,(h),(688),((OLX*bj_RADTODEG)*1.))
call SaveLightningHandle(HY,(h),(676),(l1))
call SaveLightningHandle(HY,(h),(677),(l2))
call SaveLightningHandle(HY,(h),(678),(l3))
call SaveLightningHandle(HY,(h),(679),(l4))
call SaveLightningHandle(HY,(h),(680),(l5))
call SaveBoolean(HY,(h),(689),(false))
call SaveBoolean(HY,(h),(672),(true))
call SaveReal(HY,(h),(688),((OLX*bj_RADTODEG)*1.))
call SaveReal(HY,(h),(23),((x)*1.))
call SaveReal(HY,(h),(24),((y)*1.))
call Y4E(IGO)
call SaveInteger(HY,(GetHandleId((IGO))),((4312)),(1))
call SetUnitPathing(IGO,false)
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A1Z3',true)
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A205',true)
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A1YY',false)
call KZE(IGO,'A1Z3')
call KZE(IGO,'A205')
call TriggerEvaluate(t)
set t=null
set IGO=null
set IGO=null
set l1=null
set l2=null
set l3=null
set l4=null
set l5=null
endfunction
для удобства копирни в редактор триггеров, так проще читается
ответ
пиши в тему для заказов
здесь только вопросы

23

» WarCraft 3 / Триггерная способность

Похожие вопросы:

ответ
Объясняю. Надо сначала изучить самые банальные и простые функции, включив при этом чуть чуть мозгов и немного логики, тогда не придется задавать глупые вопросы. Это не стол заказов, вам в тему заклинания_на_заказ.
Вопроса нет, а значит и ответа тоже нет. хотя вроде по факту я его дал
И кстати говоря, арифметику начинают изучают в младших классах.
ответ
~4okak:
проще просто сделать свой ланд и изменить называние карты и предметов на свои =)
+ можешь полистать на старом форуме топик с "заклинаниями на заказ" там много аналогичных примеров на карте
ps съязвил конечно немного, но если ты правда хочешь разобраться, надеюсь поможет
pss если разбираться КАК это сделано не хочешь - заклинания на заказ, делай заявку
ответ
должен сразу предупредить что делать за тебя никто не будет
теперь по твоим вопросам
  1. чтобы нельзя было кликать скрываешь, даёшь москиты, делаешь видимым
  2. действие проиграть звук и указываешь твою фразу
  3. выбираем всех подходящих(враги,живые) юнитов в радиусе от точки каста и создаём по дамми юниту(юнит без модели, без атаки, с москитами, с нужной способность, время жизни юнита 1 сек) для каждого подходящего юнита приказывая дамми юниту применить нужную способность в подходящего юнита
таким образом каждый дамми юнит применит нужную способность (в твоём случае корни) в 1 подходящего юнита для которого он и был создан а потом исчезнет
  1. система отлова урона
  2. морф юнита либо орбы
всё что я не описал есть в статьях
тебе нужны первые 2 раздела ("Основы" и "Триггеры и объекты")
ответ
Какой точный вопрос, однако.
Ответ: триггерно, либо в редакторе объектов, если нужно изменить характеристики, не создаваемые/изменяемые триггерно.
Попытаюсь сыграть в экстрасенса, подстрахуюсь логикой:
Если нужно, чтобы изменялась характеристика количественно, т.е, например, увеличивался наносимый урон, то в действии нанесения урона вместо точного значения нужно выставить функию (формулу, зависимость etc.) имеющую аргументом уровень способности.
Если нужно менять характеристику качественно, например, тип наносимого урона, то следует использовать условия, сравнивающие уровень способности с нужным значением и... далее есть несколько вариантов реализации, но наиболее подходящий - просто выполнять все последующие действия триггера внутри оператора, а затем создать несколько раз скопировать его для других условий. Хотя, с точки зрения программирования, это не очень хороший вариант.
ответ
узнать лвл спелла можно нативкой
а далее через иф или через формулу устанавливаешь лимит
в твоём примере лимит будет GetUnitAbilityLevel*10
подробнее в статьях в которые тебя уже послали
Ige, он же написал что способность триггерная

23

» WarCraft 3 / Стандартная музыка в редакторе звука

Похожие вопросы:

ответ
Осуществляешь импорт по неправильному пути. Например (я пробовал для орков), "Sound\Music\mp3Music\Orc1.mp3", "Sound\Music\mp3Music\Orc2.mp3", "Sound\Music\mp3Music\Orc3.mp3", "Sound\Music\mp3Music\Orc1X.mp3" и т.д. Все стандартные треки были заменены на мой. Чтобы корректно заменять музыку на карте, нужно знать пути импорта. Путь к оригинальным трекам можно посмотреть в mpq-архиве через архиваторы.
ответ
Это, разве что, исправить с помощью триггеров.

23

» WarCraft 3 / Несколько вопросов

Похожие вопросы:

ответ
Ну насчет первых двух вопросов не знаю. Не супер-пупер картодел. Но с последним - скачай вот это: xgm.guru/p/wc3/jassnewgenpack-exp это расширенный редактор, там можно и карту гиганта сделать и текстур добавить больше чем возможно, по моему до 16 штук, да и еще много чего, включая выключение огранки на декор и т.д. Когда запустиш через эту програмку редактор - появиться в верху дополнительные кнопочки. Нажимаеш на Extensions и в менюшке - Edit Tileset. И выбирай до 16 любых текстур... Вплоть до полной замены всех текстур карты. ..
ответ
  1. Можно выделить поверхность в отдельный геосет в мдлвис, а затем в вар3ме добавить материал с тенью и покрасить этим материалом геосет.
  2. Возможно, кость неправильно связана, проверь иерархию.
  3. Можно, через вар3ме залезть в настройки движения кости, найти фрагмент координат с нужными кадрами и удалить его. Также можно это сделать через блокнот (для .mdl)
ответ
1 вопрос-1 тема
ответ
1 и 2 вопросы - лучше всего наладь анимации death у моделей либо время разложения измени, как сказали выше. На 3 вопрос тоже уже ответили - РО - точка начала атаки. X - это слева-направо перед лицом юнита, Y - вперёд-назад от лица юнита, Z - высота.
ответ
кхе, всё вроде можно, но объяснять долго, третье простое, просто при юзании способности в триггерах добавь условие сравнения, если юнит цель применяемой способности нежить, тогда действие о дополнительном уроне, например если способность наносит 100, то 20% это 20,в действии приказать применяющий юнит нанести урон юнит цель применяемой способности 100+(0.20х100), перед этим 100 можно установить, как переменную, например если с каждым уровнем урон растёт на 100, то переменная int=100хУровень способности способность у применяющий юнит.
Сложно объяснил?

23

» WarCraft 3 / Защита

Похожие вопросы:

ответ
z1i2p3, у улучшения убери категорию "защита". Тогда циферок не будет.
Только не "эффект", а "категорию".
ответ
Чем не угодил Веер ножей смотрящей в ночь? Не сбивет приказ идти куда либо, кастуется мгновенно, но сбивает чаннелинги.
Похожим эффектом обладает Рев друидов медведей и Леденящий крик разрушителя.
А так абилок не сбивающих никакие приказы очень мало, безумия, стремительность, божественный щит, жар преисподней и остальные абилки щиты которые включаются и выключаются, так же скилл сфинксов 'Aave' но это морф, поэтому не очень подходит для основы в качестве кнопки.
ответ
lll_Kirito_lll:
Хочется иметь у себя только модель допустим )
Как вариант, сделать так, что бы модель была разбита на множество текстур которые раскиданы по самым дурацким путям. Ни какой картодел не будет вытаскивать такую модель, ни за что.
ответ
Tumart:
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
 call  BJDebugMsg( I2Sx( 100500  ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте.
I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку.
вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... )
функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
    local integer i = 486
    local string str = null
    set str = S2S( I2SH( i ) )
    call BJDebugMsg( str )
    set str = null
endfunction

//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
    set gg_trg_J_Test = CreateTrigger(  )
    call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
    call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
ответ
Cassar:
Bornikkeny, Tropical Tower War. Суть в том, что если игрок застроит проход, не давая юнитам пройти, часть его башен взорвётся. Но меня интересует не эффект, а сам способ определения такой вот "застройки".
Добавь каждого Монстра который состоит в текущей Волне в group и про этой group проверяй, как долго он стоит на месте. Если его координаты x, y равны тем что были 2 секунды назад, то выделяй все постройки в радиусе 150 от этого самого Монстра и взрывай их. Если хочешь, могу сделать наработку (но только на vJASS).

23

» WarCraft 3 / Шрифт

Похожие вопросы:

ответ
Да, конечно. Есть 2 проверенных способа:
  1. Пишем свой вар и выставляем любые желаемые цвета
  2. Переписываем .dll и в ней указывает цвета.
Проще - никак.
ответ
Zeuz, Courier New
SomeFire, скорее всего он имеет ввиду шрифты джасс кода
настраивается кнопочкой Options при редактировании джасс кода
ответ
Эмм что за ерунда, сократил код, убрав всё лишнее, но утечки все равно остаются, по 1.5 - 2 хэндла за каждое нанесение урона (тип хэндла не знаю как посмотреть). Когда триггер отключаешь, то всё нормально.
Сокращенный код
function SDMSCreateTextTag takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local unit s=GetEventDamageSource()
    local integer i=GetConvertedPlayerId(GetOwningPlayer(u))
    local texttag tt=CreateTextTag()
    local real dmg=GetEventDamage()

    if ( dmg > 1.00 ) and ( dmg < 9999.00 ) then
        if GetPlayerId(GetOwningPlayer(u))==12 then
            call SetTextTagText(tt, "|cff9db9eb-"+I2S(R2I(dmg))+"|r", 0.023)
        else
            call SetTextTagText(tt, "|cffffa500-"+I2S(R2I(dmg))+"|r", 0.023)
        endif
        call SetTextTagPosUnit(tt, u, 0)
        call SetTextTagColor(tt, 255, 255, 255, 255) 
        call SetTextTagVelocity(tt, 0.05325*Cos(90 * bj_DEGTORAD), 0.05325*Sin(90 * bj_DEGTORAD))
        call SetTextTagPermanent(tt, false)
        call SetTextTagLifespan(tt, 1.0)
        call SetTextTagFadepoint(tt, 0.0)
    endif
    call PolledWait(2.0)

    call DestroyTextTag(tt)
    set u=null
    set s=null
    set i=0
    set dmg=0
    set tt=null
endfunction

function SDMSTriggerRegisterUnitDamaged takes nothing returns nothing
    call TriggerRegisterUnitEvent(udg_SDMStrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
endfunction

function theSDMSTriggerActions takes nothing returns nothing
    local trigger UnitEnter=CreateTrigger()

    call TriggerRegisterEnterRectSimple(UnitEnter, gg_rct_Arena)
    call TriggerAddAction(UnitEnter,function SDMSTriggerRegisterUnitDamaged)

    set UnitEnter=null
endfunction

function InitTrig_the_SDMS_Trigger takes nothing returns nothing
    local trigger tr=CreateTrigger()

    set udg_SDMStrigger=CreateTrigger()//Тут также меняется название глобальной переменной типа триггер.
    call TriggerAddAction(udg_SDMStrigger,function SDMSCreateTextTag)
    call TriggerRegisterTimerEventSingle(tr,0.0)
    call TriggerAddAction(tr,function theSDMSTriggerActions)

    set tr=null
endfunction
Wait вызывает утечки ((
Пришлось делать через таймер
ответ
Функция SubString(в данном случае, используемая в функции StringColoring) не умеет работать с русскими символами.
ответ
Ну в комментариях к видео ведь есть ответ: Gear of Peace

23

» WarCraft 3 / Время действия ауры

Похожие вопросы:

ответ
Вобщем озарение как всегда пришло внезапно - понял что GetSpellAbilityUnit срабатывает на дамми и записывает в массив его, а не цель щита. Просто передвинул махинации с дамми в конец функции Actions. Всё отменно работает. Всем спасибо все свободны
ответ
пиши свою систему баффов
это не так сложно как кажется
просто вешай бафы дамикастом/спелбуком а потом удаляй при необходимости
Mrachny, как же ты надоел писать всякий бред
ты получаешь удовольствие от того что путаешь других людей?
или ты просто не способен осознать что несёшь полную ерунду?

23

» WarCraft 3 / Система типов урона

Похожие вопросы:

ответ
это морф, детка :D
ответ
нужна система поиска свободного индекса и список либо массив индексов без нулей
короче берёшь перебор на структурах и конвертируешь его в обычный jass
да и ооп намного удобнее паралельных массивов
ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.